"""
文本处理工具模块
"""

import re
from typing import List, Set
from difflib import SequenceMatcher


def clean_text(text: str) -> str:
    """
    清理文本
    
    Args:
        text: 原始文本
        
    Returns:
        清理后的文本
    """
    if not text:
        return ""
    
    # 移除多余的空白字符
    text = re.sub(r'\s+', ' ', text)
    
    # 移除特殊字符（保留中文、英文、数字和基本标点）
    text = re.sub(r'[^\u4e00-\u9fff\w\s.,!?;:()（）]', '', text)
    
    return text.strip()


def calculate_similarity(text1: str, text2: str) -> float:
    """
    计算两个文本的相似度
    
    Args:
        text1: 第一个文本
        text2: 第二个文本
        
    Returns:
        相似度分数 (0-1)
    """
    if not text1 or not text2:
        return 0.0
    
    # 使用 SequenceMatcher 计算相似度
    matcher = SequenceMatcher(None, text1, text2)
    return matcher.ratio()


def extract_keywords(text: str, min_length: int = 2) -> List[str]:
    """
    提取关键词
    
    Args:
        text: 输入文本
        min_length: 最小关键词长度
        
    Returns:
        关键词列表
    """
    if not text:
        return []
    
    # 简单的关键词提取（可以后续优化）
    # 按标点符号和空格分割
    words = re.findall(r'\b\w+\b', text)
    
    # 过滤长度和重复
    keywords = []
    seen = set()
    
    for word in words:
        if len(word) >= min_length and word.lower() not in seen:
            keywords.append(word)
            seen.add(word.lower())
    
    return keywords


def remove_duplicates_by_similarity(
    texts: List[str], 
    threshold: float = 0.8
) -> List[str]:
    """
    基于相似度去重
    
    Args:
        texts: 文本列表
        threshold: 相似度阈值
        
    Returns:
        去重后的文本列表
    """
    if not texts:
        return []
    
    unique_texts = []
    
    for text in texts:
        is_duplicate = False
        
        for unique_text in unique_texts:
            similarity = calculate_similarity(text, unique_text)
            if similarity >= threshold:
                is_duplicate = True
                break
        
        if not is_duplicate:
            unique_texts.append(text)
    
    return unique_texts
